// utils/request.js
import Toast from '@vant/weapp/toast/toast';

/**
 * 封装 wx.request，自动携带指定 header
 * @param {Object} options - 请求配置（同 wx.request 的参数）
 * @returns {Promise} - 返回 Promise 便于 async/await 使用
 */
const request = (options) => {
  // 1. 定义默认 header（固定需要携带的内容）
  const defaultHeader = {
    // 'Content-Type': 'application/json', // 示例：默认 JSON 格式
    // 'X-App-Version': '1.0.0', // 示例：固定携带的 app 版本号
    // 其他固定 header...
  };

  // 2. 动态获取需要携带的内容（如 token，从本地存储中读取）
  const openid = getApp().globalData.openid;
  if (openid) {
    defaultHeader['X-Session-ID'] = `${openid}`; // 示例：携带认证 token
  }

  // 3. 合并默认 header 和用户传入的 header（用户传入的优先）
  const header = {
    ...defaultHeader,
    ...options.header
  };

  // 4. 调用原生 wx.request，传入合并后的配置
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${getApp().globalData.appServer}/${options.url}`,
      method: options.method || 'POST', // 默认 GET 方法
      data: options.data || {},
      header: header, // 使用合并后的 header
      dataType: options.dataType || 'json',
      responseType: options.responseType || 'text',
      success: (res) => {
        // 可在这里统一处理成功逻辑（如判断状态码）
        // console.log('res', res);
        if (res.data.msg.length > 0) {
          if (res.data.code > 200 && res.data.code < 400) {
            Toast.success(res.data.msg.join('\n'));
          }
          if (res.data.code > 100 && res.data.code < 200) {
            
          }
          if (res.data.code > 0 && res.data.code < 100) {
            Toast.fail(res.data.msg.join('\n'));
          }
        }        
        if (res.data.code < 0 ) {
          Toast.fail('程序错误，请联系管理员');
        }
        resolve(res.data);
      },
      fail: (err) => {
        // 统一处理失败逻辑（如网络错误提示）
        Toast.fail('网络错误');
        reject(err);
      }
    });
  });
};

// 导出封装的请求方法
module.exports = request;